#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <nvault>
#include <codinc>


#define PLUGIN "Call of Duty: MW Mod"
#define VERSION "0.7.9 Beta"
#define AUTHOR "QTM_Peyote"

#define STANDARDOWA_SZYBKOSC 250.0

#define ZADANIE_POKAZ_INFORMACJE 672
#define ZADANIE_WSKRZES 704
#define ZADANIE_WYSZKOLENIE_SANITARNE 736
#define ZADANIE_POKAZ_REKLAME 768
#define ZADANIE_USTAW_SZYBKOSC 832
#define CZAS_DALEKIEGO_SKOKU 4.0
//#define BOTY 1

new SyncHudObj;
new SyncHudObj2;
new SyncHudObj3;
new g_msg_screenfade;

new sprite_white;
new sprite_blast;

new g_vault;

new podkladajacy;
new rozbrajajacy;

new doswiadczenia_za_zabojstwo;
new doswiadczenie_za_bombe;

new Ubrania_CT[4][]={"sas","gsg9","urban","gign"};
new Ubrania_Terro[4][]={"arctic","leet","guerilla","terror"};

new const maxAmmo[31]={0,52,0,90,1,32,1,100,90,1,120,100,100,90,90,90,100,120,30,120,200,32,90,120,90,2,35,90,90,0,100};
new const maxClip[31] = { -1, 13, -1, 10,  1,  7,  1,  30, 30,  1,  30,  20,  25, 30, 35, 25,  12,  20, 
10,  30, 100,  8, 30,  30, 20,  2,  7, 30, 30, -1,  50 };


new const doswiadczenie_poziomu[] = {0,35,140,315,560,875,1260,1715,2240,2835,3500,4235,5040,5915,6860,7875,8960,10115,11340,12635,14000,15435,16940,18515,20160,21875,23660,25515,27440,29435,31500,33635,35840,38115,40460,42875,45360,47915,50540,53235,56000,58835,61740,64715,67760,70875,
74060,77315,80640,84035,87500,91035,94640,98315,102060,105875,109760,113715,117740,121835,126000,130235,134540,138915,143360,147875,152460,157115,161840,166635,171500,176435,181440,186515,191660,196875,202160,207515,212940,218435,224000,229635,235340,241115,246960,252875,258860,
264915,271040,277235,283500,289835,296240,302715,309260,315875,322560,329315,336140,343035,350000,357035,364140,371315,378560,385875,393260,400715,408240,415835,423500,431235,439040,446915,454860,462875,470960,479115,487340,495635,504000,512435,520940,529515,538160,546875,555660,564515,573440,
582435,591500,600635,609840,619115,628460,637875,647360,656915,666540,676235,686000,695835,705740,715715,725760,735875,746060,756315,766640,777035,787500,798035,808640,819315,830060,840875,851760,862715,873740,884835,896000,907235,918540,929915,941360,952875,964460,976115,987840,999635,1011500,1023435,1035440,
1047515,1059660,1071875,1084160,1096515,1108940,1121435,1134000,1146635,1159340,1172115,1184960,1197875,1210860,1223915,1237040,1250235,1263500,1276835,1290240,1303715,1317260,1330875,1344560,1358315,1372140,1386035,1400000};


new bool:freezetime = true;

new gWszystkieKlasy[Klasy][Spec];
new gWszystkiePrzedmioty[Przedmioty][Spec];
new WszyscyGracze[33][Gracz];

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	StworzKlasy(gWszystkieKlasy);
	StworzPrzedmioty(gWszystkiePrzedmioty);
	
	g_vault = nvault_open("CodMod");
	
	register_think("Apteczka","ApteczkaThink");
	
	RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
	RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
	RegisterHam(Ham_Touch, "armoury_entity", "DotykBroni");
	RegisterHam(Ham_Touch, "weapon_shield", "DotykBroni");
	RegisterHam(Ham_Touch, "weaponbox", "DotykBroni");
	
	register_forward(FM_CmdStart, "CmdStart");
	register_forward(FM_EmitSound, "EmitSound");
	
	register_logevent("PoczatekRundy", 2, "1=Round_Start"); 
	register_logevent("BombaPodlozona", 3, "2=Planted_The_Bomb");
	
	register_event("SendAudio", "BombaRozbrojona", "a", "2&%!MRAD_BOMBDEF");
	register_event("BarTime", "RozbrajaBombe", "be", "1=10", "1=5");
	register_event("DeathMsg", "Death", "ade");
	register_event("Damage", "Damage", "b", "2!=0");
	register_event("CurWeapon","CurWeapon","be", "1=1");
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");
	
	register_touch("Rocket", "*" , "DotykRakiety");
	register_touch("Mine", "player",  "DotykMiny");
	
	register_cvar("cod_killxp", "10");
	register_cvar("cod_bombxp", "100");
	
	register_clcmd("say /klasa", "WybierzKlase");
	register_clcmd("say /klasy", "OpisKlasy");
	register_clcmd("say /przedmiot", "OpisPrzedmiotu");
	register_clcmd("say /item", "OpisPrzedmiotu");
	register_clcmd("say /drop", "WyrzucPrzedmiot");
	register_clcmd("say /wyrzuc", "WyrzucPrzedmiot");
	register_clcmd("say /reset", "KomendaResetujPunkty");
	register_clcmd("fullupdate", "BlokujKomende");
	
	register_clcmd("cl_autobuy", "BlokujKomende");
	register_clcmd("say /molotov", "BlokujKomende");
	register_clcmd("say molotov", "BlokujKomende");
	register_clcmd("cl_rebuy", "BlokujKomende");
	register_clcmd("cl_setautobuy","BlokujKomende");
	register_clcmd("rebuy", "BlokujKomende");
	register_clcmd("autobuy", "BlokujKomende");
	register_clcmd("glock", "BlokujKomende");
	register_clcmd("usp", "BlokujKomende");
	register_clcmd("p228", "BlokujKomende");
	register_clcmd("deagle", "BlokujKomende");
	register_clcmd("elites", "BlokujKomende");
	register_clcmd("fn57", "BlokujKomende");
	register_clcmd("m3", "BlokujKomende");
	register_clcmd("XM1014", "BlokujKomende");
	register_clcmd("mac10", "BlokujKomende");
	register_clcmd("tmp", "BlokujKomende");
	register_clcmd("mp5", "BlokujKomende");
	register_clcmd("ump45", "BlokujKomende");
	register_clcmd("p90", "BlokujKomende");
	register_clcmd("galil", "BlokujKomende");
	register_clcmd("ak47", "BlokujKomende");
	register_clcmd("scout", "BlokujKomende");
	register_clcmd("sg552", "BlokujKomende");
	register_clcmd("awp", "BlokujKomende");
	register_clcmd("g3sg1", "BlokujKomende");
	register_clcmd("famas", "BlokujKomende");
	register_clcmd("m4a1", "BlokujKomende");
	register_clcmd("bullpup", "BlokujKomende");
	register_clcmd("sg550", "BlokujKomende");
	register_clcmd("m249", "BlokujKomende");
	register_clcmd("shield", "BlokujKomende");
	register_clcmd("hegren", "BlokujKomende");
	register_clcmd("sgren", "BlokujKomende");
	register_clcmd("flash", "BlokujKomende");
	register_clcmd("vesthelm", "BlokujKomende");

	//register_concmd("cod_setlvl", "cmd_setlvl", ADMIN_KICK, "<name> <level>");

	g_msg_screenfade = get_user_msgid("ScreenFade");
	SyncHudObj = CreateHudSyncObj();
	SyncHudObj2 = CreateHudSyncObj();
	SyncHudObj3 = CreateHudSyncObj();
	doswiadczenia_za_zabojstwo = get_cvar_num("cod_killxp");
	doswiadczenie_za_bombe = get_cvar_num("cod_bombxp");
	
	set_task(30.0, "Pomoc");
}

public plugin_cfg() 
{	
	server_cmd("sv_maxspeed 1600");
}

public plugin_precache()
{
	sprite_white = precache_model("sprites/white.spr") ;
	sprite_blast = precache_model("sprites/dexplo.spr");
	
	precache_sound("QTM_CodMod/select.wav");
	precache_sound("QTM_CodMod/start.wav");
	precache_sound("QTM_CodMod/start2.wav");
	precache_sound("QTM_CodMod/levelup.wav");
	
	precache_model("models/w_medkit.mdl");
	precache_model("models/rpgrocket.mdl");
	precache_model("models/mine.mdl");
}

public CmdStart(id, uc_handle)
{
	if(!is_user_alive(id))
		return FMRES_IGNORED;
		
	new button = get_uc(uc_handle, UC_Buttons);
	new oldbutton = get_user_oldbutton(id);
	new flags = get_entity_flags(id);
	
	new gracz[Gracz];
	gracz = WszyscyGracze[id];
	
	new klasa[Spec];
	new item[Spec];
	klasa = gWszystkieKlasy[gracz[Gracz_Klasa]];
	item = gWszystkiePrzedmioty[gracz[Gracz_Item]];
	
	if(klasa[Spec_Flagi] & COD_FLAG_PODWSKOK ||
	    item[Spec_Flagi] & COD_FLAG_PODWSKOK)
	{
		if((button & IN_JUMP) && 
		    !(flags & FL_ONGROUND) && 
		    !(oldbutton & IN_JUMP) && 
		    gracz[Gracz_IloscSkokow] > 0)
		{
			gracz[Gracz_IloscSkokow]--;
			DodatkowySkok(id);
		}
		else if(flags & FL_ONGROUND)
		{	
			gracz[Gracz_IloscSkokow] = 1;
		}
	}
	
	if(button & IN_ATTACK)
	{
		if(klasa[Spec_Flagi] & COD_FLAG_ELIMROZ ||
		    item[Spec_Flagi] & COD_FLAG_ELIMROZ)
			EliminujRozrzut(id);
		if(klasa[Spec_Flagi] & COD_FLAG_OGRROZ ||
		    item[Spec_Flagi] & COD_FLAG_OGRROZ)
			OgraniczRozrzut(id);
	}
	
	if(klasa[Spec_Flagi] & COD_FLAG_OGRROZ ||
	    item[Spec_Flagi] & COD_FLAG_OGRROZ)
	{
	 	if(button & IN_JUMP && 
		   button & IN_DUCK && 
		   flags & FL_ONGROUND &&
		   get_gametime() > gracz[Gracz_OstatniaAkcja] + CZAS_DALEKIEGO_SKOKU)
		{
		   	gracz[Gracz_OstatniaAkcja] = floatround(get_gametime());
			DalekiSkok(id);
		}
	}
	
	return FMRES_IGNORED;
}
public DalekiSkok(id){
	new Float:velocity[3];
	VelocityByAim(id, 700, velocity);
	velocity[2] = random_float(265.0,285.0);
	entity_set_vector(id, EV_VEC_velocity, velocity);
}
public DodatkowySkok(id){
	new Float:velocity[3];
	entity_get_vector(id, EV_VEC_velocity, velocity);
	velocity[2] = random_float(265.0,285.0);
	entity_set_vector(id, EV_VEC_velocity, velocity);
}
public EliminujRozrzut(id)
{
	new Float:punchangle[3];
	entity_get_vector(id, EV_VEC_punchangle, punchangle);
}

public OgraniczRozrzut(id)
{
	new Float:punchangle[3];
	entity_get_vector(id, EV_VEC_punchangle, punchangle);
	for(new i=0; i<3;i++) 
		punchangle[i]*=0.9;
	entity_set_vector(id, EV_VEC_punchangle, punchangle);
}

public Odrodzenie(id)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return PLUGIN_CONTINUE;
	
	if(WszyscyGracze[id][Gracz_NowaKlasa])
	{
		WszyscyGracze[id][Gracz_Klasa] = _:WszyscyGracze[id][Gracz_NowaKlasa];
		WszyscyGracze[id][Gracz_NowaKlasa] = _:Klasa_Brak;
		
		WczytajDane(id, WszyscyGracze[id][Gracz_Klasa]);
	}
		
	if(!WszyscyGracze[id][Gracz_Klasa])
	{
		WybierzKlase(id);
		return PLUGIN_CONTINUE;
	}
	
	strip_user_weapons(id);
	give_item(id, "weapon_knife");
	switch(get_user_team(id))
	{
		case 1: give_item(id, "weapon_glock18");
		case 2: 
		{
			give_item(id, "weapon_usp");
			give_item(id, "weapon_defuser");
		}
	}
	
	new klasa[Spec];
	klasa = gWszystkieKlasy[WszyscyGracze[id][Gracz_Klasa]];
	new item[Spec];
	item = gWszystkiePrzedmioty[WszyscyGracze[id][Gracz_Item]];
	
	new bron[32];
	new bronie[LEN_BRONIE]
	
	copy(bronie, LEN_BRONIE -1, klasa[Spec_Bronie]);
	/* Bronie Klasy*/

	while(strlen(bronie) > 0){
		strtok(bronie, bron, 31, bronie, LEN_BRONIE-1, ',',1);
		format(bron, 31, "weapon_%s", bron);
		if(equali(bron, "weapon_he"))
			bron = "weapon_hegrenade";
		if(equali(bron, "weapon_flash"))
			bron = "weapon_flashbang";
		if(equali(bron, "weapon_smoke"))
			bron = "weapon_smokegrenade";
		give_item(id, bron);
	}
	bronie = "";
	copy(bronie, LEN_BRONIE -1, item[Spec_Bronie]);
	bron = "";
	while(strlen(bronie) > 0){
		strtok(bronie, bron, 31, bronie, LEN_BRONIE-1, ',',1);
		format(bron, 31, "weapon_%s", bron);
		if(equali(bron, "weapon_he"))
			bron = "weapon_hegrenade";
		if(equali(bron, "weapon_flash"))
			bron = "weapon_flashbang";
		if(equali(bron, "weapon_smoke"))
			bron = "weapon_smokegrenade";
			
		give_item(id, bron);
	}
	WszyscyGracze[id][Gracz_IloscApteczek] = klasa[Spec_IloscApteczek] + item[Spec_IloscApteczek];
	WszyscyGracze[id][Gracz_IloscDynamitow] = klasa[Spec_IloscDynamitow] + item[Spec_IloscDynamitow];
	WszyscyGracze[id][Gracz_IloscMin] = klasa[Spec_IloscMin] + item[Spec_IloscMin];
	WszyscyGracze[id][Gracz_IloscRakiet] = klasa[Spec_IloscRakiet] + item[Spec_IloscRakiet];
	
	new iloscHe = klasa[Spec_IloscDodatkowychGranatow] + item[Spec_IloscDodatkowychGranatow];
	
	if(iloscHe >0)
	{
		cs_set_user_bpammo(id, CSW_HEGRENADE, iloscHe);
	}
		
	if(WszyscyGracze[id][Gracz_Reset])
	{
		ResetujPunkty(id);
		WszyscyGracze[id][Gracz_Reset] = 0;
	}
	
	if(WszyscyGracze[id][Gracz_Punkty] > 0)
		PrzydzielPunkty(id);
		
	if(klasa[Spec_Flagi] & COD_FLAG_KAMUFLAZ ||
	   item[Spec_Flagi] & COD_FLAG_KAMUFLAZ)
		ZmienUbranie(id, 0);
			
	if(klasa[Spec_Flagi] & COD_FLAG_CICHECHODZ ||
	   item[Spec_Flagi] & COD_FLAG_CICHECHODZ)
		set_user_footsteps(id, 1);
	else
		set_user_footsteps(id, 0);
	
			
	new weapons[32];
	new weaponsnum;
	get_user_weapons(id, weapons, weaponsnum);
	for(new i=0; i<weaponsnum; i++)
		if(is_user_alive(id))
			if(maxAmmo[weapons[i]] > 0)
				cs_set_user_bpammo(id, weapons[i], maxAmmo[weapons[i]]);
		
	WszyscyGracze[id][Gracz_RedukcjaObrazen] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(WszyscyGracze[id][Gracz_Wytrzymalosc])))/100);
	WszyscyGracze[id][Gracz_MaxHp] = klasa[Spec_Zdrowie] + item[Spec_Zdrowie] + WszyscyGracze[id][Gracz_Zdrowie] * 2;
	
	WszyscyGracze[id][Gracz_Szybkosc] = STANDARDOWA_SZYBKOSC * (1 + klasa[Spec_DodatekDoSzybkosci] + item[Spec_DodatekDoSzybkosci] + floatround(WszyscyGracze[id][Gracz_Kondycja] * 1.3));
	
	set_user_armor(id, klasa[Spec_Pancez] + item[Spec_Pancez]);
	set_user_health(id, WszyscyGracze[id][Gracz_MaxHp]);
	
	return PLUGIN_CONTINUE;
}

public PoczatekRundy()	
{
	freezetime = false;
	for(new id=0;id<=32;id++)
	{
		if(!is_user_alive(id))
			continue;
		
		set_task(0.1, "UstawSzybkosc", id+ZADANIE_USTAW_SZYBKOSC);
		
		switch(get_user_team(id))
		{
			case 1: client_cmd(id, "spk QTM_CodMod/start");
			case 2: client_cmd(id, "spk QTM_CodMod/start2");
		}
	}
}

public NowaRunda()
{
	freezetime = true;
	new iEnt = find_ent_by_class(-1, "Mine");
	while(iEnt > 0) 
	{
		remove_entity(iEnt);
		iEnt = find_ent_by_class(iEnt, "Mine");	
	}
}

public GetInfoGracza(id, gracz[Gracz], klasa[Spec], item[Spec])
{
	gracz = WszyscyGracze[id];
	klasa = gWszystkieKlasy[gracz[Gracz_Klasa]];
	item = gWszystkiePrzedmioty[gracz[Gracz_Item]];	
}

public TakeDamage(id, idinflictor, idattacker, Float:damage, damagebits)
{
	new gracz[Gracz];
	new klasa[Spec];
	new item[Spec];
	
	new graczAtt[Gracz];
	new klasaAtt[Spec];
	new itemAtt[Spec];
	
	GetInfoGracza(id,gracz, klasa, item); 
	GetInfoGracza(idattacker,graczAtt, klasaAtt, itemAtt);
	
	if(!is_user_alive(id) || 
	   !is_user_connected(id) || 
	   !is_user_connected(idattacker) || 
	   get_user_team(id) == get_user_team(idattacker)
	   )
		return HAM_IGNORED;
		
	new health = get_user_health(id);
	new weapon = get_user_weapon(idattacker);
	
	if(health < 2)
		return HAM_IGNORED;
		
	if(gracz[Gracz_IloscChybionychPociskow])
	{
		gracz[Gracz_IloscChybionychPociskow]--;
		return HAM_SUPERCEDE;
	}
	new Float:redukcjaObrazen;
	redukcjaObrazen = gracz[Gracz_RedukcjaObrazen];
	
	if(gracz[Gracz_RedukcjaObrazen]>0)
		damage -= gracz[Gracz_RedukcjaObrazen] * damage;
			
	damage -= float(gracz[Gracz_ZmiejszenieObrazen]);
	
	if((itemAtt[Spec_Flagi] & COD_FLAG_PODWOBRZTYLU ||
	   klasaAtt[Spec_Flagi] & COD_FLAG_PODWOBRZTYLU) &&
	   !UTIL_In_FOV(id, idattacker) && 
	   UTIL_In_FOV(idattacker, id) )
		damage*=2.0;   
	
	damage += float(graczAtt[Gracz_DodatkoweObrazenia]);
		
	
	
	if(weapon != CSW_HEGRENADE)
	{
		if(klasaAtt[Spec_BronNatZabicie] == weapon ||
		   itemAtt[Spec_BronNatZabicie] == weapon)
		{
			if(klasaAtt[Spec_SzansaNatZabicia])
			{
				if(random_num(1, klasaAtt[Spec_SzansaNatZabicia]) == 1)
					damage = float(health);
			}
			if(itemAtt[Spec_SzansaNatZabicia])
			{
				if(random_num(1, itemAtt[Spec_SzansaNatZabicia]) == 1)
					damage = float(health);
			}
		}
	} else {
		if(idinflictor != idattacker && entity_get_int(idinflictor, EV_INT_movetype) != 5)
		{
			if(klasaAtt[Spec_BronNatZabicie] == weapon ||
			   itemAtt[Spec_BronNatZabicie] == weapon)
			{
				if(klasaAtt[Spec_SzansaNatZabicia])
				{
					if(random_num(1, klasaAtt[Spec_SzansaNatZabicia]) == 1)
						damage = float(health);
				}
				if(itemAtt[Spec_SzansaNatZabicia])
				{
					if(random_num(1, itemAtt[Spec_SzansaNatZabicia]) == 1)
						damage = float(health);
				}
			}
		}
	}
	if(damage > float(health))
		damage = float(health);
	else if(damage < 0.0){
		damage = 0.0;
	}
	
	if(item[Spec_MinOdpornoscNaPociski] || klasa[Spec_MinOdpornoscNaPociski])
	{
		new odbicie;
		odbicie = 0;
		if(item[Spec_MaxOdpornoscNaPociski])
		{
			if(random_num(item[Spec_MinOdpornoscNaPociski], item[Spec_MinOdpornoscNaPociski]) == 1)
			{
				odbicie = 1;
			}
		} else
			odbicie = 1;
		
		if(klasa[Spec_MaxOdpornoscNaPociski])
		{
			if(random_num(klasa[Spec_MinOdpornoscNaPociski], klasa[Spec_MinOdpornoscNaPociski]) == 1)
			{
				odbicie = 1;
			}
		} else
			odbicie = 1;
		
		if(odbicie)
		{
			SetHamParamEntity(3, id);
			SetHamParamEntity(1, idattacker);
		}
	}		
		
	SetHamParamFloat(4, damage);
	return HAM_IGNORED;
}

public Damage(id)
{
	new gracz[Gracz];
	new klasa[Spec];
	new item[Spec];
	
	new attacker = get_user_attacker(id);
	new damage = read_data(2);
	
	
	if(!is_user_alive(attacker) || 
	    !is_user_connected(attacker) || 
	    id == attacker || 
	    !WszyscyGracze[attacker][Gracz_Klasa])
		return PLUGIN_CONTINUE;
	
	GetInfoGracza(attacker, gracz, klasa, item);
	
	if( (klasa[Spec_Flagi] & COD_FLAG_OSLEPIANIE  && 
	     random_num(1, klasa[Spec_SzansaNaOslepienie]) == 1)||
	  (item[Spec_Flagi] & COD_FLAG_OSLEPIANIE  && 
	     random_num(1, item[Spec_SzansaNaOslepienie]) == 1) )
	     Oslep(id);
	     
	if(get_user_team(id) != get_user_team(attacker))
	{
		while(damage>20)
		{
			damage-=20;
			gracz[Gracz_Doswiadczenie]++;
		}
	}
	SprawdzPoziom(attacker);
	return PLUGIN_CONTINUE;
}
public Oslep(id){
	Display_Fade(id,1<<14,1<<14 ,1<<16,255,155,50,230);
}

public Death()
{
	new id = read_data(2);
	new attacker = read_data(1);
	
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return PLUGIN_CONTINUE;
	
	new weapon = get_user_weapon(attacker);
	new zdrowie = get_user_health(attacker);
	
	new gracz[Gracz];
	new klasa[Spec];
	new item[Spec];
	
	new graczAtt[Gracz];
	new klasaAtt[Spec];
	new itemAtt[Spec];
	
	GetInfoGracza(id, gracz, klasa,item);
	GetInfoGracza(attacker, graczAtt, klasaAtt,itemAtt);
	
	if(get_user_team(id) != get_user_team(attacker) && gracz[Gracz_Klasa])
	{
		new nowe_doswiadczenie = 0;
		
		nowe_doswiadczenie += doswiadczenia_za_zabojstwo;
		
		if(klasa[Spec_Premium] && klasaAtt[Spec_Premium])
			nowe_doswiadczenie += doswiadczenia_za_zabojstwo;
		
		if(gracz[Gracz_Poziom] > graczAtt[Gracz_Poziom])
			nowe_doswiadczenie += gracz[Gracz_Poziom] - graczAtt[Gracz_Poziom];
		
		if(klasaAtt[Spec_Flagi] & COD_FLAG_MAG || 
		   itemAtt[Spec_Flagi] & COD_FLAG_MAG )
		   {
			UzupelnijMagazynek(attacker, weapon);
		   }
		if(klasaAtt[Spec_HPZaZabicie] >0){
			new nowe_zdrowie = zdrowie+klasaAtt[Spec_HPZaZabicie];
			if(nowe_zdrowie > graczAtt[Gracz_MaxHp])
				nowe_zdrowie = graczAtt[Gracz_MaxHp];
			set_user_health(attacker, nowe_zdrowie);
		}
		if(itemAtt[Spec_HPZaZabicie] >0){
			new nowe_zdrowie = zdrowie+itemAtt[Spec_HPZaZabicie];
			if(nowe_zdrowie > graczAtt[Gracz_MaxHp])
				nowe_zdrowie = graczAtt[Gracz_MaxHp];
			set_user_health(attacker, nowe_zdrowie);
		}
		
#if defined BOTY
		if(is_user_bot2(attacker) && random(9) == 0)
			WyrzucPrzedmiot(id);
#endif
		if(!graczAtt[Gracz_Item])
			DajPrzedmiot(attacker, random_num(1, Przedmioty));

		set_hudmessage(255, 212, 0, 0.50, 0.33, 1, 6.0, 4.0);
		ShowSyncHudMsg(attacker, SyncHudObj2, "+%i", nowe_doswiadczenie);
		
		graczAtt[Gracz_Doswiadczenie] += nowe_doswiadczenie;
	}
	
	SprawdzPoziom(attacker);
	if(klasa[Spec_Flagi] & COD_FLAG_WSKRZESZENIE)
	if(informacje_przedmiotu_gracza[id][0] == 7 && random_num(1, informacje_przedmiotu_gracza[id][1]) == 1)
		set_task(0.1, "Wskrzes", id+ZADANIE_WSKRZES);
	
	return PLUGIN_CONTINUE;
}
public UzupelnijMagazynek(id, weapon){
	if(maxClip[weapon] > 0)
		set_user_clip(id, maxClip[weapon]);
}
public client_connect(id)
{
	
	new gracz[Gracz];
	gracz[Gracz_Klasa] = _:Klasa_Brak;
	gracz[Gracz_Item] = _:Przedmiot_Brak;
	
	WszyscyGracze[id] = gracz;
	
	//resetuje umiejetnosci
	klasa_gracza[id] = 0;
	poziom_gracza[id] = 0;
	doswiadczenie_gracza[id] = 0;
	punkty_gracza[id] = 0;
	zdrowie_gracza[id] = 0;
	inteligencja_gracza[id] = 0;
	wytrzymalosc_gracza[id] = 0;
	kondycja_gracza[id] = 0;
	maksymalne_zdrowie_gracza[id] = 0;
	szybkosc_gracza[id] = 0.0;

	
	/*was 
	get_user_name(id, nazwa_gracza[id], 63);
	*/
	get_user_name(id, WszyscyGracze[id][Gracz_Nazwa], 63);
	
	remove_task(id+ZADANIE_POKAZ_INFORMACJE);
	remove_task(id+ZADANIE_POKAZ_REKLAME);	
	remove_task(id+ZADANIE_USTAW_SZYBKOSC);
	remove_task(id+ZADANIE_WSKRZES);
	remove_task(id+ZADANIE_WYSZKOLENIE_SANITARNE);
	
	set_task(10.0, "PokazReklame", id+ZADANIE_POKAZ_REKLAME);
	set_task(3.0, "PokazInformacje", id+ZADANIE_POKAZ_INFORMACJE);
	
	//resetuje przedmioty
	UsunPrzedmiot(id);
}

public client_disconnect(id)
{
	remove_task(id+ZADANIE_POKAZ_INFORMACJE);
	remove_task(id+ZADANIE_POKAZ_REKLAME);	
	remove_task(id+ZADANIE_USTAW_SZYBKOSC);
	remove_task(id+ZADANIE_WSKRZES);
	remove_task(id+ZADANIE_WYSZKOLENIE_SANITARNE);
		
	ZapiszDane(id);
	UsunPrzedmiot(id);
}
	
public RozbrajaBombe(id){
	/* was
	if(klasa_gracza[id])
		rozbrajajacy = id;
	*/
	
	if(WszyscyGracze[id][Gracz_Klasa])
		rozbrajajacy = id;
	}
	
public BombaPodlozona()
{
	new Players[32], playerCount, id;
	get_players(Players, playerCount, "aeh", "TERRORIST");
	
	if(get_playersnum() > 1)
	{
		doswiadczenie_gracza[podkladajacy] += doswiadczenie_za_bombe;
		for (new i=0; i<playerCount; i++) 
		{
			id = Players[i];
			if(!klasa_gracza[id])
				continue;
				
			if(id != podkladajacy)
			{
				doswiadczenie_gracza[id] += doswiadczenia_za_zabojstwo;
				client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za podlozenie bomby przez twoj team.", doswiadczenia_za_zabojstwo);
			}
			else
			{
				client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za podlozenie bomby.", doswiadczenie_za_bombe);
			}
			SprawdzPoziom(id);
		}
	}
}

public BombaRozbrojona()
{
	new Players[32], playerCount, id;
	get_players(Players, playerCount, "aeh", "CT");
	
	doswiadczenie_gracza[rozbrajajacy] += doswiadczenie_za_bombe;
	for (new i=0; i<playerCount; i++) 
	{
		id = Players[i];
		if(!klasa_gracza[id])
			continue;
		if(id != rozbrajajacy)
		{
			doswiadczenie_gracza[id]+= doswiadczenia_za_zabojstwo;
			client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za rozbrojenie bomby przez twoj team.", doswiadczenia_za_zabojstwo);
		}
		else
			client_print(id, print_chat, "[COD:MW] Dostales %i doswiadczenia za rozbrojenie bomby.",doswiadczenie_za_bombe);
		SprawdzPoziom(id);
	}
}

public OpisKlasy(id)
{
	new menu = menu_create("Wybierz klase:", "OpisKlasy_Handle");
	for(new i=1; i<sizeof nazwy_klas; i++)
		menu_additem(menu, nazwy_klas[i]);
	menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
	menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
	menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
	menu_display(id, menu);
	
	client_cmd(id, "spk QTM_CodMod/select");
}

public OpisKlasy_Handle(id, menu, item)
{
	client_cmd(id, "spk QTM_CodMod/select");
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	client_print(id, print_chat, "[COD:MW] %s: %s", nazwy_klas[item+1], opisy_klas[item+1]);
	menu_display(id, menu);
	
	return PLUGIN_CONTINUE;
}

public WybierzKlase(id)
{
	new menu = menu_create("Wybierz klase:", "WybierzKlase_Handle");
	new klasa[50];
	for(new i=1; i<sizeof nazwy_klas; i++)
	{
		WczytajDane(id, i);
		format(klasa, 49, "%s \yPoziom: %i", nazwy_klas[i], poziom_gracza[id]);
		menu_additem(menu, klasa);
	}
	
	WczytajDane(id, klasa_gracza[id]);
	
	menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
	menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
	menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
	menu_display(id, menu);
		
	client_cmd(id, "spk QTM_CodMod/select");
#if defined BOTY
	if(is_user_bot2(id))
		WybierzKlase_Handle(id, menu, random(sizeof nazwy_klas-1));
#endif
}

public WybierzKlase_Handle(id, menu, item)
{
	client_cmd(id, "spk QTM_CodMod/select");
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}	
		
	item++;
	
	if(item == klasa_gracza[id])
		return PLUGIN_CONTINUE;
	
	if(item == Rambo && !(get_user_flags(id) & ADMIN_KICK))
	{
		client_print(id, print_chat, "[COD:MW] Nie masz uprawnien aby kozystac z klasy premium.");
		WybierzKlase(id);
		return PLUGIN_CONTINUE;
	}
	
	if(klasa_gracza[id])
	{
		nowa_klasa_gracza[id] = item;
		client_print(id, print_chat, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie.");
	}
	else
	{
		klasa_gracza[id] = item;
		WczytajDane(id, klasa_gracza[id]);
		Odrodzenie(id);
	}
	return PLUGIN_CONTINUE;
}

public PrzydzielPunkty(id)
{
	new inteligencja[65];
	new zdrowie[60];
	new wytrzymalosc[60];
	new kondycja[60];
	new tytul[25];
	
	format(inteligencja, 64, "Inteligencja: \r%i \y(Zwieksza obrazenia zadawane przedmiotami)", inteligencja_gracza[id]);
	format(zdrowie, 59, "Zycie: \r%i \y(Zwieksza zycie)", zdrowie_gracza[id]);
	format(wytrzymalosc, 59, "Wytrzymalosc: \r%i \y(Zmniejsza obrazenia)", wytrzymalosc_gracza[id]);
	format(kondycja, 59, "Kondycja: \r%i \y(Zwieksza tempo chodu)", kondycja_gracza[id]);
	format(tytul, 24, "Przydziel Punkty(%i):", punkty_gracza[id]);
	new menu = menu_create(tytul, "PrzydzielPunkty_Handler");
	menu_additem(menu, inteligencja);
	menu_additem(menu, zdrowie);
	menu_additem(menu, wytrzymalosc);
	menu_additem(menu, kondycja);
	menu_display(id, menu);
#if defined BOTY
	if(is_user_bot2(id))
		PrzydzielPunkty_Handler(id, menu, random(4));
#endif
}

public PrzydzielPunkty_Handler(id, menu, item)
{
	client_cmd(id, "spk QTM_CodMod/select");
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	
	switch(item) 
	{ 
		case 0: 
		{	
			if(inteligencja_gracza[id]<100)
				inteligencja_gracza[id]++;
			else 
				client_print(id, print_chat, "[COD:MW] Maxymalny poziom inteligencji osiagniety");
			
		}
		case 1: 
		{	
			if(zdrowie_gracza[id]<100)
				zdrowie_gracza[id]++;
			else 
				client_print(id, print_chat, "[COD:MW] Maxymalny poziom sily osiagniety");
		}
		case 2: 
		{	
			if(wytrzymalosc_gracza[id]<100)
				wytrzymalosc_gracza[id]++;
			else 
				client_print(id, print_chat, "[COD:MW] Maxymalny poziom zrecznosci osiagniety");
			
		}
		case 3: 
		{	
			if(kondycja_gracza[id]<100)
				kondycja_gracza[id]++;
			else 
				client_print(id, print_chat, "[COD:MW] Maxymalny poziom zwinnosci osiagniety");
		}
	}
	
	punkty_gracza[id]--;
	
	if(punkty_gracza[id]>0)
		PrzydzielPunkty(id);
		
	return PLUGIN_CONTINUE;
}

public ResetujPunkty(id)
{	
	punkty_gracza[id] = poziom_gracza[id]*2-2;
	inteligencja_gracza[id] = 0;
	zdrowie_gracza[id] = 0;
	kondycja_gracza[id] = 0;
	wytrzymalosc_gracza[id] = 0;
}

public KomendaResetujPunkty(id)
{	
	client_print(id, print_chat, "[COD:MW] Umiejetnosci zostana zresetowane w nastepnej rundzie.");
	client_cmd(id, "spk QTM_CodMod/select");
	gracz_resetuje[id] = true;
}

public WyszkolenieSanitarne(id)
{
	id -= ZADANIE_WYSZKOLENIE_SANITARNE;
	if(informacje_przedmiotu_gracza[id][0] != 16)
		return PLUGIN_CONTINUE;
	set_task(5.0, "WyszkolenieSanitarne", id+ZADANIE_WYSZKOLENIE_SANITARNE);
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE;
	new health = get_user_health(id);
	new new_health = (health+10<maksymalne_zdrowie_gracza[id])?health+10:maksymalne_zdrowie_gracza[id];
	set_user_health(id, new_health);
	return PLUGIN_CONTINUE;
}

public StworzApteczke(id)
{
	if (!ilosc_apteczek_gracza[id])
	{
		client_print(id, print_center, "Masz tylko 2 apteczki na runde!");
		return PLUGIN_CONTINUE;
	}
	
	if(inteligencja_gracza[id] < 1)
		client_print(id, print_center, "Aby wzmocnic apteczke, zwieksz inteligencje!");
		
	ilosc_apteczek_gracza[id]--;
	
	new Float:origin[3];
	entity_get_vector(id, EV_VEC_origin, origin);
	
	new ent = create_entity("info_target");
	entity_set_string(ent, EV_SZ_classname, "Apteczka");
	entity_set_edict(ent, EV_ENT_owner, id);
	entity_set_int(ent, EV_INT_solid, SOLID_NOT);
	entity_set_vector(ent, EV_VEC_origin, origin);
	entity_set_float(ent, EV_FL_ltime, halflife_time() + 7 + 0.1);
	
	
	entity_set_model(ent, "models/w_medkit.mdl");
	set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 ) 	;
	drop_to_floor(ent);
	
	entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.1);
	
	return PLUGIN_CONTINUE;
}

public ApteczkaThink(ent)
{
	new id = entity_get_edict(ent, EV_ENT_owner);
	new totem_dist = 300;
	new totem_heal = 5+floatround(inteligencja_gracza[id]*0.5);
	if (entity_get_edict(ent, EV_ENT_euser2) == 1)
	{		
		new Float:forigin[3], origin[3];
		entity_get_vector(ent, EV_VEC_origin, forigin);
		FVecIVec(forigin,origin);
		
		new entlist[33];
		new numfound = find_sphere_class(0,"player",totem_dist+0.0,entlist, 32,forigin);
		
		for (new i=0; i < numfound; i++)
		{		
			new pid = entlist[i];
			
			if (get_user_team(pid) != get_user_team(id))
				continue;
								
			new zdrowie = get_user_health(pid);
			new nowe_zdrowie = (zdrowie+totem_heal<maksymalne_zdrowie_gracza[pid])?zdrowie+totem_heal:maksymalne_zdrowie_gracza[pid];
			if (is_user_alive(pid)) set_user_health(pid, nowe_zdrowie);		
		}
		
		entity_set_edict(ent, EV_ENT_euser2, 0);
		entity_set_float(ent, EV_FL_nextthink, halflife_time() + 1.5);
		
		return PLUGIN_CONTINUE;
	}
	
	if (entity_get_float(ent, EV_FL_ltime) < halflife_time() || !is_user_alive(id))
	{
		remove_entity(ent);
		return PLUGIN_CONTINUE;
	}
	
	if (entity_get_float(ent, EV_FL_ltime)-2.0 < halflife_time())
		set_rendering ( ent, kRenderFxNone, 255,255,255, kRenderTransAlpha, 100 ) ;
		
	new Float:forigin[3], origin[3];
	entity_get_vector(ent, EV_VEC_origin, forigin);
	FVecIVec(forigin,origin);
					
	//Find people near and give them health
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY, origin );
	write_byte( TE_BEAMCYLINDER );
	write_coord( origin[0] );
	write_coord( origin[1] );
	write_coord( origin[2] );
	write_coord( origin[0] );
	write_coord( origin[1] + totem_dist );
	write_coord( origin[2] + totem_dist );
	write_short( sprite_white );
	write_byte( 0 ); // startframe
	write_byte( 0 ); // framerate
	write_byte( 10 ); // life
	write_byte( 10 ); // width
	write_byte( 255 ); // noise
	write_byte( 255 ); // r, g, b
	write_byte( 100 );// r, g, b
	write_byte( 100 ); // r, g, b
	write_byte( 128 ); // brightness
	write_byte( 5 ); // speed
	message_end();
		
	entity_set_edict(ent, EV_ENT_euser2 ,1);
	entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.5);
	
	    
	return PLUGIN_CONTINUE;

}

public StworzRakiete(id)
{
	if (!ilosc_rakiet_gracza[id])
	{
		client_print(id, print_center, "Wykrzystales juz wszystkie rakiety!");
		return PLUGIN_CONTINUE;
	}
	
	if(poprzednia_rakieta_gracza[id] + 2.0 > get_gametime())
	{
		client_print(id, print_center, "Rakiet mozesz uzywac co 2 sekundy!");
		return PLUGIN_CONTINUE;
	}
	
	if (is_user_alive(id))
	{	
		if(inteligencja_gracza[id] < 1)
			client_print(id, print_center, "Aby wzmocnic rakiete, zwieksz inteligencje!");
			
		poprzednia_rakieta_gracza[id] = get_gametime();
		ilosc_rakiet_gracza[id]--;

		new Float: Origin[3], Float: vAngle[3], Float: Velocity[3];
		
		entity_get_vector(id, EV_VEC_v_angle, vAngle);
		entity_get_vector(id, EV_VEC_origin , Origin);
	
		new Ent = create_entity("info_target");
	
		entity_set_string(Ent, EV_SZ_classname, "Rocket");
		entity_set_model(Ent, "models/rpgrocket.mdl");
	
		vAngle[0] *= -1.0;
	
		entity_set_origin(Ent, Origin);
		entity_set_vector(Ent, EV_VEC_angles, vAngle);
	
		entity_set_int(Ent, EV_INT_effects, 2);
		entity_set_int(Ent, EV_INT_solid, SOLID_BBOX);
		entity_set_int(Ent, EV_INT_movetype, MOVETYPE_FLY);
		entity_set_edict(Ent, EV_ENT_owner, id);
	
		VelocityByAim(id, 1000 , Velocity);
		entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
	}	
	return PLUGIN_CONTINUE;
}

public PolozDynamit(id)
{
	if(!ilosc_dynamitow_gracza[id])
	{
		client_print(id, print_center, "Wykorzystales juz caly dynamit!");
		return PLUGIN_CONTINUE;
	}
	
	if(inteligencja_gracza[id] < 1)
		client_print(id, print_center, "Aby wzmocnic dynamit, zwieksz inteligencje!");
	
	ilosc_dynamitow_gracza[id]--;
	new Float:fOrigin[3], iOrigin[3];
	entity_get_vector( id, EV_VEC_origin, fOrigin);
	iOrigin[0] = floatround(fOrigin[0]);
	iOrigin[1] = floatround(fOrigin[1]);
	iOrigin[2] = floatround(fOrigin[2]);

	message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
	write_byte(TE_EXPLOSION);
	write_coord(iOrigin[0]);
	write_coord(iOrigin[1]);
	write_coord(iOrigin[2]);
	write_short(sprite_blast);
	write_byte(32);
	write_byte(20);
	write_byte(0);
	message_end();
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY, iOrigin );
	write_byte( TE_BEAMCYLINDER );
	write_coord( iOrigin[0] );
	write_coord( iOrigin[1] );
	write_coord( iOrigin[2] );
	write_coord( iOrigin[0] );
	write_coord( iOrigin[1] + 300 );
	write_coord( iOrigin[2] + 300 );
	write_short( sprite_white );
	write_byte( 0 ); // startframe
	write_byte( 0 ); // framerate
	write_byte( 10 ); // life
	write_byte( 10 ); // width
	write_byte( 255 ); // noise
	write_byte( 255 ); // r, g, b
	write_byte( 100 );// r, g, b
	write_byte( 100 ); // r, g, b
	write_byte( 128 ); // brightness
	write_byte( 8 ); // speed
	message_end();

	new entlist[33];
	new numfound = find_sphere_class(id, "player", 300.0 , entlist, 32);
	
	for (new i=0; i < numfound; i++)
	{		
		new pid = entlist[i];
		
		if (!is_user_alive(pid) || get_user_team(id) == get_user_team(pid) || informacje_przedmiotu_gracza[pid][0] == 24)
			continue;
		ExecuteHam(Ham_TakeDamage, pid, 0, id, 90.0+float(inteligencja_gracza[id]) , 1);
	}
	return PLUGIN_CONTINUE;
}

public PostawMine(id)
{
	if (!ilosc_min_gracza[id])
	{
		client_print(id, print_center, "Wykorzystales juz wszystkie miny!");
		return PLUGIN_CONTINUE;
	}
	
	if(inteligencja_gracza[id] < 1)
		client_print(id, print_center, "Aby wzmocnic miny, zwieksz inteligencje!");
	
	ilosc_min_gracza[id]--;
	
	new Float:origin[3];
	entity_get_vector(id, EV_VEC_origin, origin);
		
	new ent = create_entity("info_target");
	entity_set_string(ent ,EV_SZ_classname, "Mine");
	entity_set_edict(ent ,EV_ENT_owner, id);
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS);
	entity_set_origin(ent, origin);
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX);
	
	entity_set_model(ent, "models/mine.mdl");
	entity_set_size(ent,Float:{-16.0,-16.0,0.0},Float:{16.0,16.0,2.0});
	
	drop_to_floor(ent);

	entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01) ;
	
	set_rendering(ent,kRenderFxNone, 0,0,0, kRenderTransTexture,50)	;
	
	
	return PLUGIN_CONTINUE;
}

public DotykMiny(ent, id)
{
	new attacker = entity_get_edict(ent, EV_ENT_owner);
	if (get_user_team(attacker) != get_user_team(id))
	{
		new Float:fOrigin[3], iOrigin[3];
		entity_get_vector( ent, EV_VEC_origin, fOrigin);
		iOrigin[0] = floatround(fOrigin[0]);
		iOrigin[1] = floatround(fOrigin[1]);
		iOrigin[2] = floatround(fOrigin[2]);
		
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
		write_byte(TE_EXPLOSION);
		write_coord(iOrigin[0]);
		write_coord(iOrigin[1]);
		write_coord(iOrigin[2]);
		write_short(sprite_blast);
		write_byte(32); // scale
		write_byte(20); // framerate
		write_byte(0);// flags
		message_end();
		new entlist[33];
		new numfound = find_sphere_class(ent,"player", 90.0 ,entlist, 32);
		
		for (new i=0; i < numfound; i++)
		{		
			new pid = entlist[i];
			
			if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid) || informacje_przedmiotu_gracza[pid][0] == 24 || klasa_gracza[id] == Obronca)
				continue;
				
			ExecuteHam(Ham_TakeDamage, pid, ent, attacker, 90.0+float(inteligencja_gracza[attacker]) , 1);
		}
		remove_entity(ent);
	}
}

public DotykRakiety(ent)
{
	if ( !is_valid_ent(ent))
		return;

	new attacker = entity_get_edict(ent, EV_ENT_owner);

	new Float:fOrigin[3], iOrigin[3];
	entity_get_vector( ent, EV_VEC_origin, fOrigin);	
	iOrigin[0] = floatround(fOrigin[0]);
	iOrigin[1] = floatround(fOrigin[1]);
	iOrigin[2] = floatround(fOrigin[2]);

	message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
	write_byte(TE_EXPLOSION);
	write_coord(iOrigin[0]);
	write_coord(iOrigin[1]);
	write_coord(iOrigin[2]);
	write_short(sprite_blast);
	write_byte(32); // scale
	write_byte(20); // framerate
	write_byte(0);// flags
	message_end();

	new entlist[33];
	new numfound = find_sphere_class(ent, "player", 230.0, entlist, 32);
	
	for (new i=0; i < numfound; i++)
	{		
		new pid = entlist[i];
		
		if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid) || informacje_przedmiotu_gracza[pid][0] == 24)
			continue;
		ExecuteHam(Ham_TakeDamage, pid, ent, attacker, 55.0+float(inteligencja_gracza[attacker]) , 1);
	}
	remove_entity(ent);
}	

public CurWeapon(id)
{
	if(freezetime || !klasa_gracza[id])
		return PLUGIN_CONTINUE;
		
	new weapon = read_data(2);

	UstawSzybkosc(id);
	
	if(weapon == CSW_C4)
		podkladajacy = id;
	return PLUGIN_CONTINUE;
}

public EmitSound(id, iChannel, szSound[], Float:fVol, Float:fAttn, iFlags, iPitch ) 
{
	if(equal(szSound, "common/wpn_denyselect.wav"))
	{
		UzyjPrzedmiotu(id);
		return FMRES_SUPERCEDE;
	}
	
	return FMRES_IGNORED;
}

public UzyjPrzedmiotu(id)
{
	if(informacje_przedmiotu_gracza[id][0] == 19 && informacje_przedmiotu_gracza[id][1]>0) 
	{
		set_user_health(id, maksymalne_zdrowie_gracza[id]);
		informacje_przedmiotu_gracza[id][1]--;
	}
	
	if(ilosc_apteczek_gracza[id]>0)
		StworzApteczke(id);
	if(ilosc_rakiet_gracza[id]>0)
		StworzRakiete(id);
	if(ilosc_min_gracza[id]>0)
		PostawMine(id);
	if(ilosc_dynamitow_gracza[id]>0)
		PolozDynamit(id);
		
	return PLUGIN_HANDLED;
}

public ZapiszDane(id)
{
	new vaultkey[64],vaultdata[256];
	format(vaultkey,63,"%s-%i-cod", WszyscyGracze[id][Gracz_Nazwa], klasa_gracza[id]);
	format(vaultdata,255,"%i#%i#%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], inteligencja_gracza[id], zdrowie_gracza[id], wytrzymalosc_gracza[id], kondycja_gracza[id]);
	nvault_set(g_vault,vaultkey,vaultdata);
}

public WczytajDane(id, klasa)
{
	new vaultkey[64],vaultdata[256];
	format(vaultkey,63,"%s-%i-cod", WszyscyGracze[id][Gracz_Nazwa], klasa);
	format(vaultdata,255,"%i#%i#%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], inteligencja_gracza[id], zdrowie_gracza[id], wytrzymalosc_gracza[id], kondycja_gracza[id]);
	nvault_get(g_vault,vaultkey,vaultdata,255);
 
	replace_all(vaultdata, 255, "#", " ");
 
	new doswiadczeniegracza[32], poziomgracza[32], inteligencjagracza[32], silagracza[32], zrecznoscgracza[32], zwinnoscgracza[32];
 
	parse(vaultdata, doswiadczeniegracza, 31, poziomgracza, 31, inteligencjagracza, 31, silagracza, 31, zrecznoscgracza, 31, zwinnoscgracza, 31);
 
	doswiadczenie_gracza[id] = str_to_num(doswiadczeniegracza);
	poziom_gracza[id] = str_to_num(poziomgracza)>0?str_to_num(poziomgracza):1;
	inteligencja_gracza[id] = str_to_num(inteligencjagracza);
	zdrowie_gracza[id] = str_to_num(silagracza);
	wytrzymalosc_gracza[id] = str_to_num(zrecznoscgracza);
	kondycja_gracza[id] = str_to_num(zwinnoscgracza);
	punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
} 

public WyrzucPrzedmiot(id)
{
	if(informacje_przedmiotu_gracza[id][0])
	{
		client_print(id, print_chat, "[COD:MW] Wyrzuciles %s.", nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
		UsunPrzedmiot(id);
	}
	else
		client_print(id, print_chat, "[COD:MW] Nie masz zadnego przedmiotu.", nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
}

public UsunPrzedmiot(id)
{
	informacje_przedmiotu_gracza[id][0] = 0;
	informacje_przedmiotu_gracza[id][1] = 0;
	if(is_user_alive(id))
		set_user_footsteps(id, 0);
	set_rendering(id,kRenderFxGlowShell,0,0,0 ,kRenderTransAlpha, 255);
	ZmienUbranie(id, 1);
}

public DajPrzedmiot(id, przedmiot)
{
	UsunPrzedmiot(id);
	informacje_przedmiotu_gracza[id][0] = przedmiot;
	client_print(id, print_chat, "[COD:MW] Zdobyles %s.", nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);	
	
	switch(przedmiot)
	{
		case 1:
		{
			set_user_footsteps(id, 1);
		}
		case 2:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(3,6);
		}
		case 3:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(6, 11);
		}
		case 5:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(6, 9);
		}
		case 6:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(100, 150);
			set_rendering(id,kRenderFxGlowShell,0,0,0 ,kRenderTransAlpha, informacje_przedmiotu_gracza[id][1]);
		}
		case 7:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(2, 4);
		}
		case 8:
		{
			if(klasa_gracza[id] == Komandos)
				DajPrzedmiot(id, random_num(1, sizeof nazwy_przedmiotow-1));
		}
		case 9:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(1, 3);
			ZmienUbranie(id, 0);
			give_item(id, "weapon_hegrenade");
		}
		case 10:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(4, 8);
			give_item(id, "weapon_hegrenade");
		}
		case 12:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(1, 4);
		}
		case 13:
		{
			give_item(id, "weapon_awp");
		}
		case 15:
		{
			if(klasa_gracza[id] == Rambo)
				DajPrzedmiot(id, random_num(1, sizeof nazwy_przedmiotow-1));
		}
		case 16:
		{
			set_task(5.0, "WyszkolenieSanitarne", id+ZADANIE_WYSZKOLENIE_SANITARNE);
		}
		case 19:
		{
			informacje_przedmiotu_gracza[id][1] = 1;
		}
		case 26:
		{
			informacje_przedmiotu_gracza[id][1] = random_num(3, 6);
		}
		case 27:
		{
			informacje_przedmiotu_gracza[id][1] = 3;
		}
	}
}
	
public OpisPrzedmiotu(id)
{
	new opis_przedmiotu[128];
	new losowa_wartosc[3];
	num_to_str(informacje_przedmiotu_gracza[id][1], losowa_wartosc, 2);
	format(opis_przedmiotu, 127, opisy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
	replace_all(opis_przedmiotu, 127, "LW", losowa_wartosc);
	
	client_print(id, print_chat, "Przedmiot: %s.", nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
	client_print(id, print_chat, "Opis: %s.", opis_przedmiotu);
}

public Wskrzes(id)
{
	id-=ZADANIE_WSKRZES;
	ExecuteHamB(Ham_CS_RoundRespawn, id);
}

public SprawdzPoziom(id)
{	
	if(poziom_gracza[id] < 201)
	{
		while(doswiadczenie_gracza[id] >= doswiadczenie_poziomu[poziom_gracza[id]])
		{
			poziom_gracza[id]++;
			set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2);
			ShowSyncHudMsg(id, SyncHudObj3, "Awansowales do nastepnego poziomu!");
			client_cmd(id, "spk QTM_CodMod/levelup");
		}
	
		punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
	}
	ZapiszDane(id);
}

public PokazInformacje(id) 
{
	id -= ZADANIE_POKAZ_INFORMACJE;
	
	set_task(0.1, "PokazInformacje", id+ZADANIE_POKAZ_INFORMACJE);
		
	if(!is_user_alive(id))
	{
		new target = entity_get_int(id, EV_INT_iuser2);
		
		if(target == 0)
			return PLUGIN_CONTINUE;
			
		set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2);
		ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPrzedmiot : %s", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], doswiadczenie_poziomu[poziom_gracza[target]], poziom_gracza[target], nazwy_przedmiotow[informacje_przedmiotu_gracza[target][0]]);
		
		return PLUGIN_CONTINUE;
	}
	set_hudmessage(255, 0, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
	ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Przedmiot : %s]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], doswiadczenie_poziomu[poziom_gracza[id]], poziom_gracza[id], nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
	return PLUGIN_CONTINUE;
}  

public PokazReklame(id)
{
	id-=ZADANIE_POKAZ_REKLAME;
	client_print(id, print_chat, "[COD:MW] Witaj w Modyfikacji Call of Duty stworzonej przez QTM_Peyote.");
}

public UstawSzybkosc(id)
{
	id -= id>32? ZADANIE_USTAW_SZYBKOSC: 0;
	
	if(klasa_gracza[id])
		set_user_maxspeed(id, szybkosc_gracza[id]);
}
	
public ZmienUbranie(id,reset)
{
	if (id<1 || id>32 || !is_user_connected(id)) 
		return PLUGIN_CONTINUE;
	
	if (reset)
		cs_reset_user_model(id);
	else
	{
		new num = random_num(0,3);
		switch(get_user_team(id))
		{
			case 1: cs_set_user_model(id, Ubrania_CT[num]);
			case 2:cs_set_user_model(id, Ubrania_Terro[num]);
		}
	}
	
	return PLUGIN_CONTINUE;
}

public Pomoc()
{
	switch(random(6))
	{
		case 0: client_print(0, print_chat, "[COD:MW] Aby zresetowac umiejetnosci napisz /reset.");
		case 1: client_print(0, print_chat, "[COD:MW] Aby zmienic klase napisz /klasa.");
		case 2: client_print(0, print_chat, "[COD:MW] Aby uzyc przedmiotu nacisnij E.");
		case 3: client_print(0, print_chat, "[COD:MW] Aby wyrzucic przedmiot napisz /wyrzuc.");
		case 4: client_print(0, print_chat, "[COD:MW] Aby zobaczyc opis przedmiotu napisz /przedmiot.");
		case 5: client_print(0, print_chat, "[COD:MW] Aby zobaczyc opis klas napisz /klasy.");
	}
	set_task(36.0, "Pomoc");
}

/*public cmd_setlvl(id, level, cid)
{
	if(!cmd_access(id,level,cid,3))
		return PLUGIN_HANDLED;
	new arg1[33];
	new arg2[6];
	read_argv(1, arg1, 32);
	read_argv(2, arg2, 5);
	new player = cmd_target(id, arg1);
	new value = str_to_num(arg2)-1;
	
	doswiadczenie_gracza[player] = doswiadczenie_poziomu[value];
	poziom_gracza[player] = 0;
	SprawdzPoziom(player);
	return PLUGIN_HANDLED;
}*/

public DotykBroni(weapon,id)
{
	new model[23];
	entity_get_string(weapon, EV_SZ_model, model, 22);
	if (!is_user_connected(id) || entity_get_edict(weapon, EV_ENT_owner) == id || equal(model, "models/w_backpack.mdl"))
		return HAM_IGNORED;
	return HAM_SUPERCEDE;
}

public BlokujKomende()
	return PLUGIN_HANDLED;
	
stock bool:UTIL_In_FOV(id,target)
{
	if (Find_Angle(id,target,9999.9) > 0.0)
		return true;
	
	return false;
}
#if defined BOTY
public is_user_bot2(id)
{
	new ping, loss
	get_user_ping(id, ping, loss)
	if(ping > 0 && loss > 0)
		return false
	return true
}
#endif

stock Float:Find_Angle(Core,Target,Float:dist)
{
	new Float:vec2LOS[2];
	new Float:flDot;
	new Float:CoreOrigin[3];
	new Float:TargetOrigin[3];
	new Float:CoreAngles[3];
	
	pev(Core,pev_origin,CoreOrigin);
	pev(Target,pev_origin,TargetOrigin);
	
	if (get_distance_f(CoreOrigin,TargetOrigin) > dist)
		return 0.0;
	
	pev(Core,pev_angles, CoreAngles);
	
	for ( new i = 0; i < 2; i++ )
		vec2LOS[i] = TargetOrigin[i] - CoreOrigin[i];
	
	new Float:veclength = Vec2DLength(vec2LOS);
	
	//Normalize V2LOS
	if (veclength <= 0.0)
	{
		vec2LOS[0] = 0.0;
		vec2LOS[1] = 0.0;
	}
	else
	{
		new Float:flLen = 1.0 / veclength;
		vec2LOS[0] = vec2LOS[0]*flLen;
		vec2LOS[1] = vec2LOS[1]*flLen;
	}
	
	//Do a makevector to make v_forward right
	engfunc(EngFunc_MakeVectors,CoreAngles);
	
	new Float:v_forward[3];
	new Float:v_forward2D[2];
	get_global_vector(GL_v_forward, v_forward);
	
	v_forward2D[0] = v_forward[0];
	v_forward2D[1] = v_forward[1];
	
	flDot = vec2LOS[0]*v_forward2D[0]+vec2LOS[1]*v_forward2D[1];
	
	if ( flDot > 0.5 )
	{
		return flDot;
	}
	
	return 0.0;
}

stock Float:Vec2DLength( Float:Vec[2] )  
{ 
	return floatsqroot(Vec[0]*Vec[0] + Vec[1]*Vec[1] );
}

stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)
{
	message_begin( MSG_ONE, g_msg_screenfade,{0,0,0},id );
	write_short( duration );	// Duration of fadeout
	write_short( holdtime );	// Hold time of color
	write_short( fadetype );	// Fade type
	write_byte ( red );		// Red
	write_byte ( green );		// Green
	write_byte ( blue );		// Blue
	write_byte ( alpha );	// Alpha
	message_end();
}

stock set_user_clip(id, ammo)
{
	new weaponname[32], weaponid = -1, weapon = get_user_weapon(id, _, _);
	get_weaponname(weapon, weaponname, 31);
	while ((weaponid = find_ent_by_class(weaponid, weaponname)) != 0)
		if(entity_get_edict(weaponid, EV_ENT_owner) == id) 
		{
			set_pdata_int(weaponid, 51, ammo, 4);
			return weaponid;
		}
	return 0;
}
